(function($) {

//var plugin = {
//	//Nom de la classe à instancier /!\ CE NOM DOIT ETRE UNIQUE ET IDENTIQUE AU NOM JQUERY /!\
//	name: 'ParticipantsEventPlugin'
//};

// Constructeur
var ParticipantsEventPlugin = function(options){ // rajouter element
	//console.log(this);
	if(arguments.length) {
		this._init( options );// rajouter element
	} else 
		console.log('Aucun paramètre reçu pour ParticipantsEventPlugin');
};

ParticipantsEventPlugin.prototype = {
	name: 'ParticipantsEventPlugin',
	
	defaults: {
		data: {
			participants: {},
			contacts: {},
			groups: {}
		}
	},
	
	_init: function(options){// rajouter element
		var t = this;
		
		// Public
		t.$element = $(options.element);
		t.defaults = $.extend(true, {}, t.defaults, options);
		
		// Private
		t._isEdit = false;
		t._isEditable = true;
		t._participantsEdit = {};
		
		// Initialisation
		// TODO: refaire toute l'initialisation ...
		t.$element.html(t.defaults.content);
		
		// (Temporaire !!) Récupération des participants, contacts et groupes dans la vue
		// Participants :
		var participants = {};
		$('#plug-participants-list > ul a.plug-participants-participant').each(function(i){
			participants[$('input[type=hidden].plug-participants-participant-id', this).val()] = {};
			
			var participant = participants[$('input[type=hidden].plug-participants-participant-id', this).val()];
			participant['data-group'] = $(this).parents('ul').parent('li').attr('data-group');
			participant['title'] = $(this).parents('ul').prev('a').html();
			participant['name'] = $('.plug-participants-participant-contact', this).html();
			participant['info'] = $('.plug-participants-participant-info', this).html();
			participant['state'] = $('input[type=hidden].plug-participants-participant-state', this).val();
		});
		
		t.defaults.data.participants = $.extend(true, {}, t.defaults.data.participants, participants);
		t._participantsEdit = t.defaults.data.participants;
		
		// Contacts : 
		var contacts = {};
		$('#plug-participants-contacts-list input[type=checkbox]').each(function(i){
			if(typeof contacts[$(this).val()] == 'undefined')
				contacts[$(this).val()] = {};
			
			var contact = contacts[$(this).val()];	
			contact['name'] = $(this).parent().children('span').text();
		});
		
		t.defaults.data.contacts = $.extend(true, {}, t.defaults.data.contacts, contacts);
		
		// Groupes :
		var groups = {};
		$('#plug-participants-groups-list input[type=checkbox]').each(function(i){
			if(typeof groups[$(this).val()] == 'undefined')
				groups[$(this).val()] = {};
			
			var group = groups[$(this).val()];	
			group['name'] = $(this).parent().children('span').text();
		});
		
		t.defaults.data.groups = $.extend(true, {}, t.defaults.data.groups, groups);
		
		$('#plug-participants-list > ul').remove();
		// FIN récupération
		
		// Gestion contacts	
		t.initContacts();
		
		// Gestion groupes
		t.initGroups();
		
		// Actualisation de l'affichage
		t.refresh();
		t.refreshStates();
		
		$('#plug-participants-states input[type=checkbox]').on('click', function(e){
			t.refreshContacts();
		});
		
		$('#plug-participants-menu a[data-toggle="tab"]').on('shown', function (e) {       	
	    	if($(e.target).attr('href') == '#plug-participants-list'){
	    		$('#plug-participants-actions').hide();
	    		t.refreshStates();
	    		t.resize();
	    	} else if(t._isEdit)
	    		$('#plug-participants-actions').show();
	    });
	    
		$('#plug-participants-cancel').on('click', function(e){
			e.preventDefault();
			
			t._participantsEdit = t.defaults.data.participants;
			$('#plug-participants-actions').hide();
			t._isEdit = false;
			t.refresh();
		});
		
		$('#plug-participants-save').on('click', function(e){
			e.preventDefault();
			
			if($('#eventManager').data('eventManager').baseEvent.event.isNew){
				t.defaults.data.participants = t._participantsEdit;
				t._isEdit = false;
				$('#plug-participants-actions').hide();

				t.refresh();
				t.refreshContacts();
				t.refreshStates();
					        			
				$('#plug-participants-menu a[data-toggle="tab"][href="#plug-participants-list"]').click();
			} else
				t.submitParticipants();
		});
	},
	
	initContacts: function(){
		var t = this;
		$('#plug-participants-contacts-visibility').on('click', function(e){
			e.preventDefault();
			
			var link = $(this);
			link.parent('div').next().stop().toggle(function(){
				if($(this).is(':hidden'))
					link.html('Afficher');
				else
					link.html('Masquer');
			});
		});
		
		$('#plug-participants-contacts-search-add').on('click', function(e){
			e.preventDefault();
			
			t.addParticipant($('#plug-participants-contacts-search').val());
		});
		
		$('#plug-participants-contacts-search-remove').on('click', function(e){
			e.preventDefault();
			
			t.removeParticipant($('#plug-participants-contacts-search').val());
		});
		
		$('#plug-participants-contacts-search').select2({
			formatNoMatches: function () {
	            return "Aucun contact trouvé";
	        },
	        formatInputTooShort: function (a, b) {
	            return "Entrez au moins " + (b - a.length) + " charactères";
	        },
	        formatSelectionTooBig: function (a) {
	            return "Vous pouvez selectionner seulement " + a + " élement" + (1 == a ? "" : "s");
	        },
	        formatLoadMore: function () {
	            return "Chargement de plus de résultats...";
	        },
	        formatSearching: function () {
	            return "Recherche ...";
	        },
		});
		
		$('#plug-participants-contacts-list input[type=checkbox]').on('click', function(e){
//			e.preventDefault();
//			e.stopPropagation();
			if(!$(this).is(':checked')){
				t.removeParticipant($(this).val());
			} else {
				t.addParticipant($(this).val());
			}
		});
	},
	
	initGroups: function(){
		var t = this;
		$('#plug-participants-groups-visibility').on('click', function(e){
			e.preventDefault();
			
			var link = $(this);
			link.parent('div').next().stop().toggle(function(){
				if($(this).is(':hidden'))
					link.html('Afficher');
				else
					link.html('Masquer');
			});
		});
		
		$('#plug-participants-groups-search-add').on('click', function(e){
			e.preventDefault();
			
			t.addParticipant($('#plug-participants-groups-search').val());
		});
		
		$('#plug-participants-groups-search-remove').on('click', function(e){
			e.preventDefault();
			
			t.removeParticipant($('#plug-participants-groups-search').val());
		});
		
		$('#plug-participants-groups-search').select2({
			formatNoMatches: function () {
	            return "Aucun contact trouvé";
	        },
	        formatInputTooShort: function (a, b) {
	            return "Entrez au moins " + (b - a.length) + " charactères";
	        },
	        formatSelectionTooBig: function (a) {
	            return "Vous pouvez selectionner seulement " + a + " élement" + (1 == a ? "" : "s");
	        },
	        formatLoadMore: function () {
	            return "Chargement de plus de résultats...";
	        },
	        formatSearching: function () {
	            return "Recherche ...";
	        },
		});
		
		$('#plug-participants-groups-list input[type=checkbox]').on('click', function(e){
//			e.preventDefault();
//			e.stopPropagation();
			if(!$(this).is(':checked')){
				t.removeParticipant($(this).val());
			} else {
				t.addParticipant($(this).val());
			}
		});
	},
	
	sortParticipants: function(attribut){
		var t = this;
    	var indexs = new Array();
    	var mirrorId = {};
    	var participants = {};
    	$.each(t.defaults.data.participants, function(id, participant){
    		indexs.push(participant[attribut]);
    		if(typeof mirrorId[participant[attribut]] == 'undefined')
    			mirrorId[participant[attribut]] = new Array();
    		mirrorId[participant[attribut]].push(id);
    	});
    	
    	indexs.sort();
    	
    	$.each(indexs, function(id, value){
    		$.each(mirrorId[value], function(i, idParticipant){
    			var participant = t.defaults.data.participants[idParticipant];
    			participant['data-group'] = t.defaults.data.participants[idParticipant].name.substr(0,1).toLowerCase();
    			participant['title'] = t.defaults.data.participants[idParticipant].name.substr(0,1).toUpperCase();
    			
        		participants[idParticipant] = participant;       		
    		});
    	});
    	
    	t.defaults.data.participants = participants;
    },
	
	refresh: function(idEditing){
		var t = this;
		var participants = t.defaults.data.participants;
		if(typeof idEditing != 'undefined' && idEditing)
			participants = t._participantsEdit;
		else
			t.refreshContacts();
			
		// Réinitialisation des checkbox
		$('#plug-participants-contacts-list input[type=checkbox]').attr('checked', false);
		$('#plug-participants-groups-list input[type=checkbox]').attr('checked', false);
		
		var nbParticipants = 0;
				
		$.each(participants, function (id, participant){
			// Mise à jour des checkbox
			if(typeof t.defaults.data.contacts[id] != 'undefined'){
				$('#plug-participants-contacts-list input[value='+id+']').each(function(){
					$(this).attr('checked', true);
				});
			}
			if(typeof t.defaults.data.groups[id] != 'undefined'){
				$('#plug-participants-groups-list input[value='+id+']').each(function(){
					$(this).attr('checked', true);
				});
			}

			nbParticipants++;
		});
			
		if(nbParticipants == 0){
			$('#plug-participants-contacts-visibility, #plug-participants-groups-visibility')
				.hide()
				.parents('.alert')
					.removeClass('alert-success')
			;
			
			if(!t._isEdit && $('#plug-participants-list-empty').size() == 0)
				$('#plug-participants-list').prepend('<div id="plug-participants-list-empty" class="alert"></div>');
			
			$('#plug-participants-contacts-number, #plug-participants-groups-number, #plug-participants-list-empty').html('Il n\'y a aucun invité à cet événement');
		} else {		
			$('#plug-participants-contacts-visibility, #plug-participants-groups-visibility')
				.show()
				.parents('.alert')
					.addClass('alert-success')
			;
			
			// Actualisation des checkbox des invités
			$('#plug-participants-contacts-guests input, #plug-participants-groups-guests input').each(function(){
				$(this).attr('checked', true); // Pas obligatoire ...
				$(this).on('click', function(e){
					e.preventDefault();
					e.stopPropagation();
					t.removeParticipant($(this).val());
				});
			});
			
			if(nbParticipants == 1){
				$('#plug-participants-contacts-number, #plug-participants-groups-number').html('Il y a 1 invité à cet événement');
			} else {
				$('#plug-participants-contacts-number, #plug-participants-groups-number').html('Il y a '+nbParticipants+' invités à cet événement');
			}
			
			if(!t._isEdit)
				$('#plug-participants-list-empty').remove();
		}

		t.resize();
	},
	
	refreshContacts: function(){
		var t = this;
		// Suppression et réinit de contactList
		$('#plug-participants-list .contact-list').remove();
		var contactListContent = $('<ul />').appendTo($('#plug-participants-list'));
		
		var nbParticipants = 0;
		var participatingStates = {
			0 : 0,
			1 : 0,
			2 : 0,
			3 : 0
		};
		
		// Trie par ordre alpha des participants
		t.sortParticipants('name');
		
		$.each(t.defaults.data.participants, function (id, participant){
			if($('.plug-participants-state-'+participant['state']).is(':checked')){				
				// Mise à jour de la vue pour contactList
				var groupContacts;
				if($('li[data-group="'+participant['data-group']+'"]', contactListContent).size() == 0){
					var group = $('<li data-group="'+participant['data-group']+'" />').appendTo(contactListContent)
						.append('<a class="title">'+participant['title']+'</a>');
					groupContacts = $('<ul />').appendTo(group);
				} else
					groupContacts = $('li[data-group="'+participant['data-group']+'"] ul', contactListContent);
				
				var content = ''+ 
					'<li><a class="plug-participants-participant muted" href="#">'+
					'<input type="hidden" class="plug-participants-participant-id" value="'+id+'" />'+
					'<input type="hidden" class="plug-participants-participant-state" value="'+participant['state']+'" />'+
			        '<span class="plug-participants-participant-contact text-nowrap" style="width: 70%;">'+participant['name']+'</span>';
				if(t._isEditable){
					content += '<span class="plug-participants-participant-tools">'+
						'<span><i class="icos-cross"></i></span>' +
						'<span><i class="icos-mail"></i></span>' +
						'</span>';
				}
				content += '</li></a>';
			        
			    groupContacts.append(content);
			}
			
			participatingStates[participant['state']]++;
			nbParticipants++;
		});
		
		$.each(participatingStates, function(state, value){
			$('#plug-participants-resume-count-'+state).html(value);
		});
		
		if(nbParticipants > 0){
			contactListContent.contactList({
				filterPlaceholder: 'Rechercher ...'
			});
			
			$('a', contactListContent).on('click', function(e){ e.preventDefault(); });
		} 
	},
	
	refreshStates: function(){
		var t = this;
		var countParticipation = 0;
		var countDontKnow = 0;
		var countAbsent = 0; 
		var total = 0;
		
		$.each(t.defaults.data.participants, function (id, participant){
			$('#plug-participants-list .contact-items a input[value='+id+'].plug-participants-participant-id').each(function(){
				var parent = $(this).parents('a');
				switch(parseInt(participant.state)){
					case 1:
						$('.plug-participants-participant-contact', parent).addClass('text-success');	
						if($('i.icol-accept', parent).size() == 0)
							$('.plug-participants-participant-contact', parent).prepend('<i class="icol-accept"></i> ');
						countParticipation++;
					break;
					case 2:
						$('.plug-participants-participant-contact', parent).addClass('text-info');	
						if($('i.icol-help', parent).size() == 0)
							$('.plug-participants-participant-contact', parent).prepend('<i class="icol-help"></i> '); 
						countDontKnow++;
					break;
					case 3:
						$('.plug-participants-participant-contact', parent).addClass('text-error');
						if($('i.icol-cross', parent).size() == 0)
							$('.plug-participants-participant-contact', parent).prepend('<i class="icol-cross"></i> '); 
						countAbsent++;
					break;
				}
				
				total++;
			});		
		});

		$('#plug-participants-resume-count-participant').html(countParticipation);
		$('#plug-participants-resume-count-dontknow').html(countDontKnow);
		$('#plug-participants-resume-count-absent').html(countAbsent);
		
		$('#plug-participants-resume-bar-participant').width((countParticipation*100/total)+'%');
		$('#plug-participants-resume-bar-dontknow').width((countDontKnow*100/total)+'%');
		$('#plug-participants-resume-bar-absent').width((countAbsent*100/total)+'%');
		
		if(total != 0)
			$('#plug-participants-resume .ticks li').html(parseInt((countParticipation+countDontKnow+countAbsent)*100/total)+'% de réponses');
		else
			$('#plug-participants-resume .ticks li').html('0% de réponses');
	},
	
	removeParticipant: function(idParticipant){
		var t = this;
		if(!idParticipant){
			console.log('Ce participant est incorrect');
		} else if(typeof t._participantsEdit[idParticipant] != 'undefined'){	
			t._isEdit = true;
			$('#plug-participants-actions').show();
			
			delete t._participantsEdit[idParticipant];
			$('#plug-participants-contacts-guests input[value='+idParticipant+'], #plug-participants-groups-guests input[value='+idParticipant+']').each(function(){
				$(this).parent('label').remove();
			});
			
			t.refresh(true);
		} else {
			$.pnotify({
                title: "Suppression impossible !",
                text: 'Le participant n\'a pas été invité',
                type: "error"
            });
		}
	},
	
	addParticipant: function(idParticipant){
		var t = this;
		if(!idParticipant){
			console.log('Ce participant est incorrect');
		} else if(typeof t._participantsEdit[idParticipant] == 'undefined'){
			t._isEdit = true;
			$('#plug-participants-actions').show();
			
			var name = 'nom + prenom';
			
			$('#plug-participants-contacts-list input[value='+idParticipant+'], #plug-participants-groups-list input[value='+idParticipant+']').each(function(){
				if($('#plug-participants-contacts-guests input[value='+idParticipant+'], #plug-participants-groups-guests input[value='+idParticipant+']').size() == 0){
					name = $(this).next('span').html();
					$('#plug-participants-contacts-guests, #plug-participants-groups-guests').append(
						'<label class="checkbox">'+
			       			'<input type="checkbox" checked="checked" value="'+idParticipant+'" />'+ 
			       			'<span>'+name+'</span>'+
			       		'</label>'
					);
				}
			});
			
			var participants = {};
			participants[idParticipant] = {};
				
			var participant = participants[idParticipant];
			participant['data-group'] = name.substr(0,1);
			participant['title'] = name.substr(0,1).toUpperCase();
			participant['name'] = name;
			participant['info'] = 'Info fonction + société';
			participant['state'] = 0;
			
			t._participantsEdit = $.extend(true, {}, t._participantsEdit, participants);
					
			t.refresh(true);
		} else {
			$.pnotify({
                title: "Ajout impossible !",
                text: 'Le participant a déjà été invité',
                type: "error"
            });
		}
	},
	
	submitParticipants: function(callback){
		var t = this;

		if(!t.defaults.options.urlUpdateAction){
			console.log('Le plugin a été mal configuré pour l\'ajout de participant');
		} else {
			var dataSend = {
				id_contacts: new Array()
			};
			
			$.each(t._participantsEdit, function (id, participant){
				dataSend.id_contacts.push(id);
			});
			
			if(t.defaults.idEvent == 0){
				$.pnotify({
                    title: "Erreur !",
                    text: 'L\'événement doit être créer pour enregistrer les participants',
                    type: "error"
                });
				return;
			}
			
			var urlUpdate = t.defaults.options.urlBase + 
				t.defaults.options.urlPattern
					.replace(/idEvent/, t.defaults.idEvent)
					.replace(/action/, t.defaults.options.urlUpdateAction);
			
			$.ajax({
	    		type: 'POST',
	    		url: urlUpdate,
			  	data: dataSend,
			    dataType: "json"
	    	}).done(function(jsonResult) {
	    		if(jsonResult && typeof jsonResult.result != 'undefined'){
	        		if(jsonResult.result == 200){
	        			t.defaults.data.participants = t._participantsEdit;
	        			t._isEdit = false;
	        			$('#plug-participants-actions').hide();
	        				        			
	        			if(typeof callback == 'function'){
	        				callback();
	        			} else {
	        				$('#plug-participants-menu a[data-toggle="tab"][href="#plug-participants-list"]').click();

		    	    		t.refresh();
		    	    		t.refreshContacts();
		    	    		t.refreshStates();
		    	    		
		        			$.pnotify({
		                        title: "Terminé !",
		                        text: jsonResult.msg,
		                        type: "success"
		                    });
	        			}
	        		} else if(jsonResult.result == 500){
	        			$.pnotify({
	                        title: "Erreur !",
	                        text: jsonResult.msg,
	                        type: "error"
	                    });
	        		}
	    		} else {
	    			alert('La réponse du serveur est incorrecte');
	        	}
	    	}).fail(function(jqXHR, textStatus, errorThrown) {
	    		t.refresh();
	    		alert('Une erreur est survenue ('+errorThrown+')');
	    	}).always(function(jqXHR, textStatus, errorThrown) {
	    	});
		}
	},
	
	resize: function(){
		var t = this;
		// Petit temps d'attente sinon la hauteur est à 0
		setTimeout(function(){
			//$(".tab-pane", plugin.element).css("height", 'auto');
			//if(!$('#eventManager').data('eventManager').baseEvent.event.isNew){
				$(".contact-items-container", $("#em-plugin-participants")).css("height", $(".contact-nav", $("#em-plugin-participants")).height());
				//$(".tab-pane", plugin.element).css("height", $(".tab-pane:first", plugin.element).height());
			//}
		}, 5);
	}
};

$.fn.pluginParticipantsEvent = function(options) {

	var isMethodCall = typeof options === "string",
		args = Array.prototype.slice.call( arguments, 1 ),
		returnValue = this;

	// prevent calls to internal methods
	if ( isMethodCall && options.charAt( 0 ) === "_" ) {
		return returnValue;
	}

	if ( isMethodCall ) {
		this.each(function() {
			var instance = $.data( this, 'ParticipantsEventPlugin' ),
				methodValue = instance && $.isFunction( instance[options] ) ?
					instance[ options ].apply( instance, args ) :
					instance;

			if ( methodValue !== instance && methodValue !== undefined ) {
				returnValue = methodValue;
				return false;
			}
		});
	} else {
		this.each(function() {
			var instance = $.data( this, 'ParticipantsEventPlugin' );
			if ( !instance ) {
				$.data( this, 'ParticipantsEventPlugin', new ParticipantsEventPlugin( this, options ) );
			}
		});
	}

	return returnValue;
};

//plugin.manager = function(_settings) {
//	var t = this;
//
//	var defaults = {
//		options:{},	
//		data: {
//			participants: {},
//			contacts: {},
//			groups: {}
//		}
//	};
//
//	t.settings = $.extend(true, {}, defaults, _settings);
//	t.element = (typeof t.settings.element != 'undefined') ? t.settings.element : null;
//	t.idEvent = (typeof t.settings.idEvent != 'undefined') ? t.settings.idEvent : 0;
//	t.participantsEdit = {};
//	
//	// Si aucun element du DOM n'a été spécifié le plugin est rattaché à l'element appelant
//	if(!t.element){
//		this.each(function(i, _element){
//			t.element = $(_element);
//		});
//	}
//
//	t.participantsEvent = new ParticipantsEvent(t);
//	
//	return this;
//};
//
//function ParticipantsEvent(_plugin){
//	var t = this;
//	var plugin = _plugin;
//	
//	var isEdit = false;
//	
//	t.submitParticipants = submitParticipants;
//
//	$(plugin.element).html(plugin.settings.content);
//	
//	// (Temporaire !!) Récupération des participants, contacts et groupes dans la vue
//	// Participants :
//	var participants = {};
//	$('#plug-participants-list > ul a.plug-participants-participant').each(function(i){
//		participants[$('input[type=hidden].plug-participants-participant-id', this).val()] = {};
//		
//		var participant = participants[$('input[type=hidden].plug-participants-participant-id', this).val()];
//		participant['data-group'] = $(this).parents('ul').parent('li').attr('data-group');
//		participant['title'] = $(this).parents('ul').prev('a').html();
//		participant['name'] = $('.plug-participants-participant-contact', this).html();
//		participant['info'] = $('.plug-participants-participant-info', this).html();
//		participant['state'] = $('input[type=hidden].plug-participants-participant-state', this).val();
//	});
//	
//	plugin.settings.data.participants = $.extend(true, {}, plugin.settings.data.participants, participants);
//	plugin.participantsEdit = plugin.settings.data.participants;
//	
//	// Contacts : 
//	var contacts = {};
//	$('#plug-participants-contacts-list input[type=checkbox]').each(function(i){
//		if(typeof contacts[$(this).val()] == 'undefined')
//			contacts[$(this).val()] = {};
//		
//		var contact = contacts[$(this).val()];	
//		contact['name'] = $(this).parent().children('span').text();
//	});
//	
//	plugin.settings.data.contacts = $.extend(true, {}, plugin.settings.data.contacts, contacts);
//	
//	// Groupes :
//	var groups = {};
//	$('#plug-participants-groups-list input[type=checkbox]').each(function(i){
//		if(typeof groups[$(this).val()] == 'undefined')
//			groups[$(this).val()] = {};
//		
//		var group = groups[$(this).val()];	
//		group['name'] = $(this).parent().children('span').text();
//	});
//	
//	plugin.settings.data.groups = $.extend(true, {}, plugin.settings.data.groups, groups);
//	
//	$('#plug-participants-list > ul').remove();
//	// FIN récupération
//		
//	// Gestion contacts	
//	initContacts();
//	
//	// Gestion groupes
//	initGroups();
//	
//	// Actualisation de l'affichage
//	refresh();
//	refreshStates();
//	
//    $('#plug-participants-menu a[data-toggle="tab"]').on('shown', function (e) {       	
//    	if($(e.target).attr('href') == '#plug-participants-list'){
//    		$('#plug-participants-actions').hide();
//    		refreshStates();
//    		resize();
//    	} else if(isEdit)
//    		$('#plug-participants-actions').show();
//    });
//    
//	$('#plug-participants-cancel').on('click', function(e){
//		e.preventDefault();
//		
//		plugin.participantsEdit = plugin.settings.data.participants;
//		$('#plug-participants-actions').hide();
//		isEdit = false;
//		refresh();
//	});
//	
//	$('#plug-participants-save').on('click', function(e){
//		e.preventDefault();
//		
//		if($('#eventManager').data('eventManager').baseEvent.event.isNew){
//			plugin.settings.data.participants = plugin.participantsEdit;
//			isEdit = false;
//			$('#plug-participants-actions').hide();
//
//    		refresh();
//    		refreshContacts();
//    		refreshStates();
//				        			
//			$('#plug-participants-menu a[data-toggle="tab"][href="#plug-participants-list"]').click();
//		} else
//			submitParticipants();
//	});
//        	
//	function initContacts(){
//		$('#plug-participants-contacts-visibility').on('click', function(e){
//			e.preventDefault();
//			
//			var link = $(this);
//			link.parent('div').next().stop().toggle(function(){
//				if($(this).is(':hidden'))
//					link.html('Afficher');
//				else
//					link.html('Masquer');
//			});
//		});
//		
//		$('#plug-participants-contacts-search-add').on('click', function(e){
//			e.preventDefault();
//			
//			addParticipant($('#plug-participants-contacts-search').val());
//		});
//		
//		$('#plug-participants-contacts-search-remove').on('click', function(e){
//			e.preventDefault();
//			
//			removeParticipant($('#plug-participants-contacts-search').val());
//		});
//		
//		$('#plug-participants-contacts-search').select2({
//			formatNoMatches: function () {
//	            return "Aucun contact trouvé";
//	        },
//	        formatInputTooShort: function (a, b) {
//	            return "Entrez au moins " + (b - a.length) + " charactères";
//	        },
//	        formatSelectionTooBig: function (a) {
//	            return "Vous pouvez selectionner seulement " + a + " élement" + (1 == a ? "" : "s");
//	        },
//	        formatLoadMore: function () {
//	            return "Chargement de plus de résultats...";
//	        },
//	        formatSearching: function () {
//	            return "Recherche ...";
//	        },
//		});
//		
//		$('#plug-participants-contacts-list input[type=checkbox]').on('click', function(e){
////			e.preventDefault();
////			e.stopPropagation();
//			if(!$(this).is(':checked')){
//				removeParticipant($(this).val());
//			} else {
//				addParticipant($(this).val());
//			}
//		});
//	}
//	
//	function initGroups(){
//		$('#plug-participants-groups-visibility').on('click', function(e){
//			e.preventDefault();
//			
//			var link = $(this);
//			link.parent('div').next().stop().toggle(function(){
//				if($(this).is(':hidden'))
//					link.html('Afficher');
//				else
//					link.html('Masquer');
//			});
//		});
//		
//		$('#plug-participants-groups-search-add').on('click', function(e){
//			e.preventDefault();
//			
//			addParticipant($('#plug-participants-groups-search').val());
//		});
//		
//		$('#plug-participants-groups-search-remove').on('click', function(e){
//			e.preventDefault();
//			
//			removeParticipant($('#plug-participants-groups-search').val());
//		});
//		
//		$('#plug-participants-groups-search').select2({
//			formatNoMatches: function () {
//	            return "Aucun contact trouvé";
//	        },
//	        formatInputTooShort: function (a, b) {
//	            return "Entrez au moins " + (b - a.length) + " charactères";
//	        },
//	        formatSelectionTooBig: function (a) {
//	            return "Vous pouvez selectionner seulement " + a + " élement" + (1 == a ? "" : "s");
//	        },
//	        formatLoadMore: function () {
//	            return "Chargement de plus de résultats...";
//	        },
//	        formatSearching: function () {
//	            return "Recherche ...";
//	        },
//		});
//		
//		$('#plug-participants-groups-list input[type=checkbox]').on('click', function(e){
////			e.preventDefault();
////			e.stopPropagation();
//			if(!$(this).is(':checked')){
//				removeParticipant($(this).val());
//			} else {
//				addParticipant($(this).val());
//			}
//		});
//	}
//	
//	function sortParticipants(attribut){
//    	var indexs = new Array();
//    	var mirrorId = {};
//    	var participants = {};
//    	$.each(plugin.settings.data.participants, function(id, participant){
//    		indexs.push(participant[attribut]);
//    		if(typeof mirrorId[participant[attribut]] == 'undefined')
//    			mirrorId[participant[attribut]] = new Array();
//    		mirrorId[participant[attribut]].push(id);
//    	});
//    	
//    	indexs.sort();
//    	
//    	$.each(indexs, function(id, value){
//    		$.each(mirrorId[value], function(i, idParticipant){
//    			var participant = plugin.settings.data.participants[idParticipant];
//    			participant['data-group'] = plugin.settings.data.participants[idParticipant].name.substr(0,1).toLowerCase();
//    			participant['title'] = plugin.settings.data.participants[idParticipant].name.substr(0,1).toUpperCase();
//    			
//        		participants[idParticipant] = participant;       		
//    		});
//    	});
//    	
//    	plugin.settings.data.participants = participants;
//    }
//	
//	function refresh(idEditing){
//		var participants = plugin.settings.data.participants;
//		if(typeof idEditing != 'undefined' && idEditing)
//			participants = plugin.participantsEdit;
//		else
//			refreshContacts();
//			
//		// Réinitialisation des checkbox
//		$('#plug-participants-contacts-list input[type=checkbox]').attr('checked', false);
//		$('#plug-participants-groups-list input[type=checkbox]').attr('checked', false);
//		
//		var nbParticipants = 0;
//		
//		console.log(plugin);
//		
//		$.each(participants, function (id, participant){
//			// Mise à jour des checkbox
//			if(typeof plugin.settings.data.contacts[id] != 'undefined'){
//				$('#plug-participants-contacts-list input[value='+id+']').each(function(){
//					$(this).attr('checked', true);
//				});
//			}
//			if(typeof plugin.settings.data.groups[id] != 'undefined'){
//				$('#plug-participants-groups-list input[value='+id+']').each(function(){
//					$(this).attr('checked', true);
//				});
//			}
//
//			nbParticipants++;
//		});
//			
//		if(nbParticipants == 0){
//			$('#plug-participants-contacts-visibility, #plug-participants-groups-visibility')
//				.hide()
//				.parents('.alert')
//					.removeClass('alert-success')
//			;
//			
//			if(!isEdit && $('#plug-participants-list-empty').size() == 0)
//				$('#plug-participants-list').prepend('<div id="plug-participants-list-empty" class="alert"></div>');
//			
//			$('#plug-participants-contacts-number, #plug-participants-groups-number, #plug-participants-list-empty').html('Il n\'y a aucun invité à cet événement');
//		} else {		
//			$('#plug-participants-contacts-visibility, #plug-participants-groups-visibility')
//				.show()
//				.parents('.alert')
//					.addClass('alert-success')
//			;
//			
//			// Actualisation des checkbox des invités
//			$('#plug-participants-contacts-guests input, #plug-participants-groups-guests input').each(function(){
//				$(this).attr('checked', true); // Pas obligatoire ...
//				$(this).on('click', function(e){
//					e.preventDefault();
//					e.stopPropagation();
//					removeParticipant($(this).val());
//				});
//			});
//			
//			if(nbParticipants == 1){
//				$('#plug-participants-contacts-number, #plug-participants-groups-number').html('Il y a 1 invité à cet événement');
//			} else {
//				$('#plug-participants-contacts-number, #plug-participants-groups-number').html('Il y a '+nbParticipants+' invités à cet événement');
//			}
//			
//			if(!isEdit)
//				$('#plug-participants-list-empty').remove();
//		}
//
//		resize();
//	}
//	
//	function refreshContacts(){
//		// Suppression et réinit de contactList
//		$('#plug-participants-list .contact-list').remove();
//		var contactListContent = $('<ul />').appendTo($('#plug-participants-list'));
//		
//		var nbParticipants = 0;
//		
//		// Trie par ordre alpha des participants
//		sortParticipants('name');
//		
//		$.each(plugin.settings.data.participants, function (id, participant){
//			// Mise à jour de la vue pour contactList
//			var groupContacts;
//			if($('li[data-group="'+participant['data-group']+'"]', contactListContent).size() == 0){
//				var group = $('<li data-group="'+participant['data-group']+'" />').appendTo(contactListContent)
//					.append('<a class="title">'+participant['title']+'</a>');
//				groupContacts = $('<ul />').appendTo(group);
//			} else
//				groupContacts = $('li[data-group="'+participant['data-group']+'"] ul', contactListContent);
//			
//			groupContacts.append(
//				'<li><a class="plug-participants-participant muted" href="#">'+
//				'<input type="hidden" class="plug-participants-participant-id" value="'+id+'" />'+
//				'<input type="hidden" class="plug-participants-participant-state" value="'+participant['state']+'" />'+
//		        '<span class="plug-participants-participant-contact">'+participant['name']+'</span>'+ 
//		        '<span class="plug-participants-participant-info" style="font-size: 11px; display:block;" class="muted">'+participant['info']+'</span>'+
//		        '</li></a>');
//			
//			nbParticipants++;
//		});
//		
//		if(nbParticipants > 0){
//			contactListContent.contactList({
//				filterPlaceholder: 'Rechercher ...'
//			});
//		}
//	}
//	
//	function refreshStates(){
//		var countParticipation = 0;
//		var countDontKnow = 0;
//		var countAbsent = 0; 
//		var total = 0;
//		
//		$.each(plugin.settings.data.participants, function (id, participant){
//			$('#plug-participants-list .contact-items a input[value='+id+'].plug-participants-participant-id').each(function(){
//				var parent = $(this).parents('a');
//				switch(parseInt(participant.state)){
//					case 1:
//						$('.plug-participants-participant-contact', parent).addClass('text-success');	
//						if($('i.icol-accept', parent).size() == 0)
//							$('.plug-participants-participant-contact', parent).prepend('<i class="icol-accept"></i> ');
//						countParticipation++;
//					break;
//					case 2:
//						$('.plug-participants-participant-contact', parent).addClass('text-info');	
//						if($('i.icol-help', parent).size() == 0)
//							$('.plug-participants-participant-contact', parent).prepend('<i class="icol-help"></i> '); 
//						countDontKnow++;
//					break;
//					case 3:
//						$('.plug-participants-participant-contact', parent).addClass('text-error');
//						if($('i.icol-cross', parent).size() == 0)
//							$('.plug-participants-participant-contact', parent).prepend('<i class="icol-cross"></i> '); 
//						countAbsent++;
//					break;
//				}
//				
//				total++;
//			});		
//		});
//
//		$('#plug-participants-resume-count-participant').html(countParticipation);
//		$('#plug-participants-resume-count-dontknow').html(countDontKnow);
//		$('#plug-participants-resume-count-absent').html(countAbsent);
//		
//		$('#plug-participants-resume-bar-participant').width((countParticipation*100/total)+'%');
//		$('#plug-participants-resume-bar-dontknow').width((countDontKnow*100/total)+'%');
//		$('#plug-participants-resume-bar-absent').width((countAbsent*100/total)+'%');
//		
//		if(total != 0)
//			$('#plug-participants-resume .ticks li').html(parseInt((countParticipation+countDontKnow+countAbsent)*100/total)+'% de réponses');
//		else
//			$('#plug-participants-resume .ticks li').html('0% de réponses');
//	}
//	
//	function removeParticipant(idParticipant){
//		if(!idParticipant){
//			console.log('Ce participant est incorrect');
//		} else if(typeof plugin.participantsEdit[idParticipant] != 'undefined'){	
//			isEdit = true;
//			$('#plug-participants-actions').show();
//			
//			delete plugin.participantsEdit[idParticipant];
//			$('#plug-participants-contacts-guests input[value='+idParticipant+'], #plug-participants-groups-guests input[value='+idParticipant+']').each(function(){
//				$(this).parent('label').remove();
//			});
//			
//			refresh(true);
//		} else {
//			$.pnotify({
//                title: "Suppression impossible !",
//                text: 'Le participant n\'a pas été invité',
//                type: "error"
//            });
//		}
//	}
//	
//	function addParticipant(idParticipant){
//		if(!idParticipant){
//			console.log('Ce participant est incorrect');
//		} else if(typeof plugin.participantsEdit[idParticipant] == 'undefined'){
//			isEdit = true;
//			$('#plug-participants-actions').show();
//			
//			$('#plug-participants-contacts-list input[value='+idParticipant+'], #plug-participants-groups-list input[value='+idParticipant+']').each(function(){
//				if($('#plug-participants-contacts-guests input[value='+idParticipant+'], #plug-participants-groups-guests input[value='+idParticipant+']').size() == 0){
//					$('#plug-participants-contacts-guests, #plug-participants-groups-guests').append(
//						'<label class="checkbox">'+
//			       			'<input type="checkbox" checked="checked" value="'+idParticipant+'" />'+ 
//			       			'<span>'+$(this).next('span').html()+'</span>'+
//			       		'</label>'
//					);
//				}
//			});
//			
//			var participants = {};
//			participants[idParticipant] = {};
//				
//			var participant = participants[idParticipant];
//			participant['data-group'] = 'n';
//			participant['title'] = 'N';
//			participant['name'] = 'nom + prenom';
//			participant['info'] = 'Info fonction + société';
//			participant['state'] = 0;
//			
//			plugin.participantsEdit = $.extend(true, {}, plugin.participantsEdit, participants);
//					
//			refresh(true);
//		} else {
//			$.pnotify({
//                title: "Ajout impossible !",
//                text: 'Le participant a déjà été invité',
//                type: "error"
//            });
//		}
//	}
//	
//	function submitParticipants(callback){
//		if(!plugin.settings.options.urlUpdateAction){
//			console.log('Le plugin a été mal configuré pour l\'ajout de participant');
//		} else {
//			var dataSend = {
//				id_contacts: new Array()
//			};
//			
//			$.each(plugin.participantsEdit, function (id, participant){
//				dataSend.id_contacts.push(id);
//			});
//			
//			if(plugin.idEvent == 0){
//				$.pnotify({
//                    title: "Erreur !",
//                    text: 'L\'événement doit être créer pour enregistrer les participants',
//                    type: "error"
//                });
//				return;
//			}
//			
//			var urlUpdate = plugin.settings.options.urlBase + 
//				plugin.settings.options.urlPattern
//					.replace(/idEvent/, plugin.idEvent)
//					.replace(/action/, plugin.settings.options.urlUpdateAction);
//			
//			$.ajax({
//	    		type: 'POST',
//	    		url: urlUpdate,
//			  	data: dataSend,
//			    dataType: "json"
//	    	}).done(function(jsonResult) {
//	    		if(jsonResult && typeof jsonResult.result != 'undefined'){
//	        		if(jsonResult.result == 200){
//	        			plugin.settings.data.participants = plugin.participantsEdit;
//	        			isEdit = false;
//	        			$('#plug-participants-actions').hide();
//	        				        			
//	        			if(typeof callback == 'function'){
//	        				callback();
//	        			} else {
//	        				$('#plug-participants-menu a[data-toggle="tab"][href="#plug-participants-list"]').click();
//
//		    	    		refresh();
//		    	    		refreshContacts();
//		    	    		refreshStates();
//		    	    		
//		        			$.pnotify({
//		                        title: "Terminé !",
//		                        text: jsonResult.msg,
//		                        type: "success"
//		                    });
//	        			}
//	        		} else if(jsonResult.result == 500){
//	        			$.pnotify({
//	                        title: "Erreur !",
//	                        text: jsonResult.msg,
//	                        type: "error"
//	                    });
//	        		}
//	    		} else {
//	    			alert('La réponse du serveur est incorrecte');
//	        	}
//	    	}).fail(function(jqXHR, textStatus, errorThrown) {
//	    		refresh();
//	    		alert('Une erreur est survenue ('+errorThrown+')');
//	    	}).always(function(jqXHR, textStatus, errorThrown) {
//	    	});
//		}
//	} 
//	
//	function resize(){
//		// Petit temps d'attente sinon la hauteur est à 0
//		setTimeout(function(){
//			//$(".tab-pane", plugin.element).css("height", 'auto');
//			//if(!$('#eventManager').data('eventManager').baseEvent.event.isNew){
//				$(".contact-items-container", $("#em-plugin-participants")).css("height", $(".contact-nav", $("#em-plugin-participants")).height());
//				//$(".tab-pane", plugin.element).css("height", $(".tab-pane:first", plugin.element).height());
//			//}
//		}, 5);
//	}
//}

// Association en tant que plugin jQuery
//$.fn.ParticipantsEventPlugin = plugin.ParticipantsEventPlugin;

// Si l'eventManager a été déclaré on le surcharge pour la gestion du plugin
if(typeof $.eventManager != 'undefined'){
	var em = $.eventManager;
	
	// Ajout du plugin au register du manager, il sera instancié par le manager automatiquement
	em.addPluginToRegister('ParticipantsEventPlugin', ParticipantsEventPlugin);
	
	// Ajout d'une fonction lors du callback du init plugins
	em.addCallBackInit(function(){
		var pluginGeneralEvent = $('#eventManager').data('eventManager').plugins['GeneralEventPlugin'];

		// A la création d'un event dans generalPlugin on envoi le submit des participants
		if(typeof pluginGeneralEvent != 'undefined'){
			pluginGeneralEvent.onFinishSubmitEvent = function(jsonResult, dataSend){
				var pluginParticipantsEvent = $('#eventManager').data('eventManager').plugins['ParticipantsEventPlugin'];

				pluginParticipantsEvent.idEvent = jsonResult.idEvent;
				pluginParticipantsEvent.submitParticipants(function(){
					$.pnotify({
				        title: "Terminé !",
				        text: jsonResult.msg,
				        type: "success"
				    });
					
					if(typeof jsonResult.refresh != 'undefined'){
						document.location.href = jsonResult.refresh;
						return;
					} else {
						var pluginGeneralEvent = $('#eventManager').data('eventManager').plugins['GeneralEventPlugin'];
						pluginGeneralEvent.refreshView(dataSend);
						$('#plug-general-cancel').click();
					}
				});
			};
		}
	});
}

})(jQuery);